﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using CondorTravelOperacionesWeb.Source;
using condortravel.operaciones.common;
using condortravel.operaciones.entities.Entities;
using condortravel.operaciones.core.DataModel;
using condortravel.operaciones.business.operaciones;
using condortravel.operaciones.business.mantenimientoOperaciones;
using condortravel.operaciones.error.Operaciones;
using condortravel.operaciones.common.Log;

namespace CondorTravelOperacionesWeb.Pages.Seguimiento
{
    public partial class FormConEventosOtros : PageBase
    {

        #region Business Objects
        private OperacionesServices operacionesServices;

        public OperacionesServices OperacionesServices
        {
            set { operacionesServices = value; }
        }
        private MantenimientoServices mantenimientoServices;

        public MantenimientoServices MantenimientoServices
        {
            
            set { mantenimientoServices = value; }
        }

        #endregion

        #region Eventos Pagina
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                cargaDatosIniciales();
                
            }
        }


        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvList_OnRowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "editar")
            {
                int codigoEventoExtra= int.Parse(e.CommandArgument.ToString());
                Tb_EventoExtraordinario eventoExtra=operacionesServices.getEventoExtraordinarioByID(codigoEventoExtra);
                txtEditarCodigo.Text = eventoExtra.eventoExt_ID.ToString();
                txtEditarDetalle.Text = eventoExtra.detalle.ToString();
                txtEditarFechaEvento.Text = eventoExtra.fecha.ToShortDateString();
                txtEditarHoraEvento.Text = eventoExtra.hora.ToString();
                Util.SelectItemDropDownList(cboEditarEstadoEvento, eventoExtra.estadoEventExt_ID.ToString());
                Util.SelectItemDropDownList(cboEditarTipoEventoNuevo, eventoExtra.tipoEventExt_ID.ToString());
                visualizarFicha(2, true);//editar            
                habilitarFicha(2);
            }
            if (e.CommandName == "eliminar")
            {
                int codigoEventoExtra = int.Parse(e.CommandArgument.ToString());
                operacionesServices.eliminarEventoExtraordinario(codigoEventoExtra);
                UCMessageForm.showMessage("Registro eliminado", ELogLevel.INFO);
                buscarEventos();
             }
            

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvList_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    Tb_EventoExtraordinario evento = (Tb_EventoExtraordinario)e.Row.DataItem;
                    LinkButton hplEliminar = (LinkButton)e.Row.FindControl("hplEliminar");
                    hplEliminar.Attributes.Add("onclick", String.Format("if(!confirm('Está seguro que desea eliminar el evento seleccionado?')) return false;"));

                }

            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Buscar_Click(object sender, EventArgs e)
        {
            buscarEventos();

        }
        protected void cmdNuevoEvento_Click(object sender, EventArgs e)
        {
            visualizarFicha(1, true);//editar            
            habilitarFicha(1);
            limpiarNuevoCampos();
            

        }

        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
         protected void cmdNuevo_Click(object sender, EventArgs e)
        {
            

            NuevoEventoExtraordinario();

        }

         protected void cmdActualizar_Click(object sender, EventArgs e)
         {
             EditarEventoExtraordinario();
         }
        
        #endregion

        #region Metodos privados


         private void EditarEventoExtraordinario()
         {
             try
             {
                 Tb_EventoExtraordinario eventoExtra = this.getEventoExtraordinarioEditar();
                 operacionesServices.guardarEventoExtra(eventoExtra);
                 buscarEventos();
                 visualizarFicha(0, true);//            
                 visualizarFicha(1, false);//editar            
                 visualizarFicha(2, false);//editar            
                 habilitarFicha(0);

                 UCMessageForm.showMessage("Los datos han sido actualizados correctamente", ELogLevel.INFO);
             }
             catch (Exception exc)
             {
                 UCMessageForm.showMessage(exc.Message, ELogLevel.ERROR);
             }
         
         }

        /// <summary>
        /// 
        /// </summary>
         private void NuevoEventoExtraordinario()
         {
             try
             {
                 Tb_EventoExtraordinario eventoExtra = this.getEventoExtraordinario();
                 operacionesServices.guardarEventoExtra(eventoExtra);
                 buscarEventos();
                 visualizarFicha(0, true);//editar            
                 visualizarFicha(1, false);//editar    
                 visualizarFicha(2, false);//editar   
                 habilitarFicha(0);

                 UCMessageForm.showMessage("Los datos han sido actualizados correctamente", ELogLevel.INFO);
             }
             catch (Exception exc)
             {
                 UCMessageForm.showMessage(exc.Message, ELogLevel.ERROR);
             }
         }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
         private Tb_EventoExtraordinario getEventoExtraordinario()
         {
             Tb_EventoExtraordinario evento = null;
             try
             {
                 evento = new Tb_EventoExtraordinario();
                 evento.eventoExt_ID = (txtNuevoCodigo.Text == String.Empty) ? 0 : int.Parse(txtNuevoCodigo.Text);
                 evento.detalle = txtNuevoDetalle.Text.Trim();
                 evento.estadoEventExt_ID = (cboNuevoEstadoEvento.SelectedValue == String.Empty) ? 0 : int.Parse(cboNuevoEstadoEvento.SelectedValue);
                 evento.fecha = DateTime.Parse(txtNuevoFechaEvento.Text + " " + txtNuevoHoraEvento.Text);
                 evento.hora = txtNuevoHoraEvento.Text.Trim();
                 evento.tipoEventExt_ID=(cboNuevoTipoEventoNuevo.SelectedValue == String.Empty) ? 0 : int.Parse(cboNuevoTipoEventoNuevo.SelectedValue);
                 evento.agente_ID = this.UserLogIn.UserID;
             }
             catch (Exception exc)
             {
                 UCMessageForm.showMessage(exc.Message, ELogLevel.ERROR);
             }
             return evento;
         }

         private Tb_EventoExtraordinario getEventoExtraordinarioEditar()
         {
             Tb_EventoExtraordinario evento = null;
             try
             {
                 evento = new Tb_EventoExtraordinario();
                 evento.eventoExt_ID = (txtEditarCodigo.Text == String.Empty) ? 0 : int.Parse(txtEditarCodigo.Text);
                 evento.detalle = txtEditarDetalle.Text.Trim();
                 evento.estadoEventExt_ID = (cboEditarEstadoEvento.SelectedValue == String.Empty) ? 0 : int.Parse(cboEditarEstadoEvento.SelectedValue);
                 evento.fecha = DateTime.Parse(txtEditarFechaEvento.Text + " " + txtEditarHoraEvento.Text);
                 evento.hora = txtEditarHoraEvento.Text.Trim();
                 evento.tipoEventExt_ID = (cboEditarTipoEventoNuevo.SelectedValue == String.Empty) ? 0 : int.Parse(cboEditarTipoEventoNuevo.SelectedValue);
                 evento.agente_ID = this.UserLogIn.UserID;
             }
             catch (Exception exc)
             {
                 UCMessageForm.showMessage(exc.Message, ELogLevel.ERROR);
             }
             return evento;
         }

        /// <summary>
        /// Obtiene la lista de Incidencias segun el criterio ingresado
        /// </summary>
        private void buscarEventos()
        {
            try
            {
                FilterEventoExtCriteria filter = obtenerCriterios();
                List<Tb_EventoExtraordinario> lista = operacionesServices.getListEventosExtByCriteria(filter);
                gvList.DataSource = lista;
                gvList.DataBind();
                if (lista.Count == 0)
                    throw new OperacionesException.NoExisteItinerariosOPException();
            }
            catch (Exception exc1)
            {
                UCMessageForm.showMessage(exc1.Message, condortravel.operaciones.common.Log.ELogLevel.ERROR);
                LogApp.WriteLog(ELogLevel.ERROR, string.Format("{0}-{1}", exc1.Message, exc1.StackTrace));
            }

        }

        private void limpiarNuevoCampos()
        {
            txtNuevoCodigo.Text = "0";
            txtNuevoDetalle.Text = string.Empty;
            txtNuevoFechaEvento.Text =DateTime.Now.ToShortDateString();
            txtNuevoHoraEvento.Text = DateTime.Now.ToShortTimeString();
            cboNuevoEstadoEvento.SelectedIndex = 0;
            cboNuevoTipoEventoNuevo.SelectedIndex = 0;
        
        }

        /// <summary>
        /// 
        /// </summary>
        private void cargaDatosIniciales()
        {
            Util.LoadDropDownList(cboEstadoItinerario, Estaticas.getListEstadoEventoExt(), "descripcion", "estadoEventExt_ID", true, "0", "-");
            Util.LoadDropDownList(cboTipoEvento, Estaticas.getListTipoEventoExt(), "descripcion", "tipoEventExt_ID", true, "0", "-");

            //Nuevo Evento
            Util.LoadDropDownList(cboNuevoEstadoEvento, Estaticas.getListEstadoEventoExt(), "descripcion", "estadoEventExt_ID", true, "0", "-");
            Util.LoadDropDownList(cboNuevoTipoEventoNuevo, Estaticas.getListTipoEventoExt(), "descripcion", "tipoEventExt_ID", true, "0", "-");
            Util.LoadDropDownList(cboEditarEstadoEvento, Estaticas.getListEstadoEventoExt(), "descripcion", "estadoEventExt_ID", true, "0", "-");
            Util.LoadDropDownList(cboEditarTipoEventoNuevo, Estaticas.getListTipoEventoExt(), "descripcion", "tipoEventExt_ID", true, "0", "-");

            txtNuevoFechaEvento.Text = DateTime.Now.ToShortDateString();
            txtNuevoHoraEvento.Text = DateTime.Now.ToShortTimeString();

            //Para validar el ingreso de algun criterio
            cmdBuscar.Attributes.Add("onclick", String.Format("if(!FF_checkFieldsEmpty()) return false;"));
        }

        /// <summary>
        /// Obtener la lista de los criterios
        /// </summary>
        /// <returns></returns>
        private FilterEventoExtCriteria obtenerCriterios()
        {
            FilterEventoExtCriteria criterios = new FilterEventoExtCriteria();
            criterios.Estado = (cboEstadoItinerario.SelectedIndex == 0 ? 0 : int.Parse(cboEstadoItinerario.SelectedValue));
            criterios.FecInicio = (txtFechaInicio.Text.Trim().Equals(String.Empty) ? DateTime.MinValue : DateTime.Parse(txtFechaInicio.Text));
            criterios.FecFin = (txtFechaTermino.Text.Trim().Equals(String.Empty) ? DateTime.MinValue : DateTime.Parse(txtFechaTermino.Text));
            criterios.Tipo = (cboTipoEvento.SelectedIndex == -1 ? 0 : int.Parse(cboTipoEvento.SelectedValue));

            return criterios;
        }

        private void habilitarFicha(int tabIndex)
        {
            this.tbcModos.Tabs[tabIndex].Enabled = true;
            this.tbcModos.ActiveTabIndex = tabIndex;
            this.tbcModos.Tabs[tabIndex].Visible = true;

        }

        private void visualizarFicha(int tabIndex, bool visualiza)
        {
            this.tbcModos.Tabs[tabIndex].Enabled = visualiza;
            this.tbcModos.Tabs[tabIndex].Visible = visualiza;

        }
        #endregion


    }
}